package cate.game.rank.po;

import cate.game.role.Role;
import org.apache.commons.lang3.StringUtils;

public class ExtraReplayRankSPO extends ExtraValueRankSPO{
    public ExtraReplayRankSPO(Type type){
        super(type);
    }

    /**
     * 默认value大 extravalue大的牛逼
     * @param role role
     * @param value 参数1
     * @param extraValue 参数2
     * @param sort 是否排序
     */
    public void record(Role role, long value, long extraValue, String replayUid, boolean sort){
        if (list.size() >= getRankNum()) {
            Rank last = list.get(list.size() - 1);
            if (failCompareToLastOne(last.value, last.extraValue, value, extraValue)) {
                // 没有进排行榜
                role.getGame().facilities.getMongo().play.deleteById(replayUid);
                return;
            }
            if(StringUtils.isNotBlank(last.replayUid)){
                role.getGame().facilities.getMongo().play.deleteById(last.replayUid);
            }
        }
        // 是否已经上榜
        Rank item = findByRoleUid(role.getUid());
        long preValue = item == null ? 0 : item.value;
        long preExtraValue = item == null ? 0 : item.extraValue;
        if (item != null) {
            item.updateOwner(role, value, extraValue, replayUid);
        } else {
            // 之前没有上榜
            Rank e = new Rank(role, value, extraValue, replayUid);
            if (list.size() >= getRankNum()) {
                // 如果排行榜已经满了，那就把最后一名给去掉
                list.remove(list.size() - 1);
            }
            list.add(e);
        }
        if(sort && (preValue != value || preExtraValue != extraValue)){
            sort(type);
        }
    }
}
